home *** CD-ROM | disk | FTP | other *** search
/ BCI NET / BCI NET Dec 94.iso / archives / programming / blitzbasic / riblitzlibs.lha / riblitzlibs / fx / ZoomWindow.asc < prev   
Encoding:
Text File  |  2002-02-02  |  5.0 KB  |  174 lines

  1. ; RI Zoomer
  2. ; (C)1994 Reflective Images
  3. ; By Stephen NcNamara
  4. ; Uses: FX-library
  5. ; Make sure you have these installed before you try compiling this program.
  6. ; Demonstrates: Using ZoomXn commands
  7.  
  8. DEFTYPE.w windh,windw,windwmod,azoom,bzoom,azoom2,azoom3,bzoom3
  9.  
  10. NoCli
  11. AMIGA
  12.  
  13. WBStartup
  14. WbToScreen 0                                  ; get Workbench as screen 0
  15. ShowScreen 0                                  ; bring it to the front
  16. ScreensBitMap 0,0                             ; get the bitmap
  17. Use BitMap 0 : BitMapOutput 0
  18.  
  19. deep.b=Peek.b(Addr BitMap(0)+5)               ; get Workbench depth
  20. If deep<1 Then BeepScreen 0 : End             ; if error then end
  21.  
  22. BitMap 1,320,256,deep                         ; get a couple of bitmaps
  23. BitMap 2,320,256,deep
  24.  
  25. BorderPens 2,1
  26.  
  27. Use Screen 0
  28. scrh.l=WBHeight
  29. scrw.l=WBWidth
  30.  
  31. MenuTitle 0,0,"Zoomer"
  32. MenuItem 0,0,0,0," Zoom X2 display        ","1"
  33. MenuItem 0,0,0,1," Zoom X4 display        ","2"
  34. MenuItem 0,0,0,2," Zoom X8 display        ","3"
  35. MenuItem 0,0,0,3,"========================" : MenuState 0,0,3,Off
  36. MenuItem 0,0,0,4," Program info ","H"
  37. MenuItem 0,0,0,5," Quit and die ","Q"
  38. MenuTitle 0,1,"Preferences"
  39. MenuItem 0,%1,1,0,"  Coordinates     ","C"
  40.  
  41. SizeLimits 136,64,320,256
  42. Window 0,487,22,153,64,$1|$2|$4|$8|$10|$20|$40|$200|$400|$1000,"RI Zoom window (X2)",1,2,0
  43. SetMenu 0
  44.  
  45. zoom.w=2
  46. Gosub UpdateWind
  47.  
  48. ;The main loop!
  49. Repeat
  50.   ev.l=Event : evw.l=EventWindow                       ;get events
  51.   If evm=0                                             ;if our window
  52.     If ev=4 OR ev=2                                    ;window changed size
  53.       Use BitMap 2 : BitMapOutput 2
  54.       Cls
  55.       Use Window 0 : WCls
  56.       Use BitMap 0 : BitMapOutput 0
  57.       Gosub UpdateWind
  58.     EndIf
  59.     If ev=64 AND GadgetHit=0 AND info                  ;if close window
  60.       Gosub RemoveInfo                                 ; and info window open
  61.     EndIf
  62.     If ev=256 AND MenuHit=0                            ;if menu selected
  63.       oldzoom.w=zoom
  64.       Select ItemHit
  65.         Case 0
  66.           zoom=2                                       ;change zoom to X2
  67.         Case 1
  68.           zoom=4                                       ;change zoom to X4
  69.         Case 2
  70.           zoom=8                                       ;change zoom to X8
  71.         Case 4
  72.           Gosub About                                  ;info window open
  73.         Case 5
  74.           End                                          ;exit program
  75.       End Select
  76.       If oldzoom<>zoom                                 ;if zoom changed
  77.         Use BitMap 2 : BitMapOutput 2
  78.         Cls
  79.         Use Window 0 : WCls
  80.         Gosub UpdateTitle
  81.         Gosub UpdateWind
  82.       EndIf
  83.     EndIf
  84.     If ev=256 AND MenuHit=1
  85.       Select ItemHit
  86.         Case 0
  87.           coords=MenuChecked(0,1,0)
  88.           If coords=0 Then Gosub UpdateTitle
  89.       End Select
  90.     EndIf
  91.   EndIf
  92.  
  93.   Use BitMap 1 : BitMapOutput 1                        ;do actual zooming!
  94.   xm.w=SMouseX : ym.w=SMouseY                          ;get mouse co-ords
  95.   x.w=xm-azoom3 : y.w=ym-bzoom3                        ;subtract zoom width/height
  96.   If x<0 Then x=0                                      ;check for off screen
  97.   If y<0 Then y=0
  98.   If x>scrw-azoom Then x=scrw-azoom
  99.   If y>scrh-bzoom Then y=scrh-bzoom
  100.   Scroll x,y,azoom,bzoom,0,0,0                         ;grab the block
  101.   azoom2.w=azoom+8                                     ;increase to make
  102.   If azoom>320 Then azoom=320                          ; sure window will be full
  103.   Select zoom
  104.     Case 2
  105.       ZoomX2 1,2,0,0,azoom2,bzoom                      ;do X2
  106.     Case 4
  107.       ZoomX4 1,2,0,0,azoom2,bzoom                      ;do X4
  108.     Case 8
  109.       ZoomX8 1,2,0,0,azoom2,bzoom                      ;do X8
  110.   End Select
  111.   Use Window 0
  112.   If coords Then WTitle Str$(xm)+","+Str$(ym),"RI Zoomer" ;do co-ords
  113.   BitMaptoWindow 2,0,0,0,0,0,windwmod,windh               ;copy zoom into window
  114.   VWait
  115. Until ev=$200 AND evm=0
  116. End
  117.  
  118. ;Print some program info
  119. About:
  120.   If info=1 Then Return
  121.  
  122.   Restore AboutInfo
  123.   Read num.w
  124.   x.w=(WBWidth-320)/2 : y.w=(WBHeight-120)/2
  125.   TextGadget 0,140,113,0,0," Okay "
  126.   Window 1,x,y,320,128,$2,"Program Info",1,2,0
  127.   Activate 1
  128.   For h=1 To num
  129.     Read a$
  130.     WLocate 160-Len(a$)*4,h*8
  131.     NPrint a$
  132.   Next h
  133.  
  134.   Wline 2,110,316,110,1
  135.   If coords=0 Then Gosub UpdateTitle
  136.   info=1
  137.   Return
  138.  
  139. ;Get rid of info window
  140. RemoveInfo:
  141.   Free Window 1
  142.   Use Window 0
  143.   Activate 0
  144.   ev=0
  145.   Free GadgetList 0
  146.   info=0
  147. Return
  148.  
  149. ;Update zoom windows title
  150. UpdateTitle:
  151.   If coords=0 Then Use Window 0 : WTitle "RI Zoom Window (X"+Str$(zoom)+")","RI Zoomer"
  152. Return
  153.  
  154. ;Change variables used by zoom loop
  155. ;Adjusts to make sure zoom fill the entire window size
  156. UpdateWind:
  157.   Use Window 0
  158.   windw.w=InnerWidth
  159.   windh.w=InnerHeight
  160.   windwmod.w=windw-(windw MOD zoom)
  161.   azoom.w=(windw)/zoom
  162.   bzoom.w=(windh)/zoom
  163.   azoom3=azoom ASR 1
  164.   bzoom3=bzoom ASR 1
  165. Return
  166.  
  167. ;Text to display
  168. AboutInfo:
  169.   Data.w 9
  170.   Data$  "RI Zoomer v0.2","","(C) 1994 Reflective Images",""
  171.   Data$  "Written in Blitz Basic 2 by","Stephen McNamara"
  172.   Data$  "","Using the FX library developed","by Reflective Images"
  173.  
  174.